import type { NextApiRequest, NextApiResponse } from 'next';
import { createEmailcode, deleteEmailcode, getPassCodeByEmail } from '@/lib/logupemail_database_method';
import { searchDatas } from '@/lib/userdata_database_method';

const nodemailer = require('nodemailer');

// 创建邮件发送器
const transporter = nodemailer.createTransport({
  host: "smtp.163.com", // 使用 smtp地址
  port: 465,
  secure: true,
  auth: {
    user: 'snowtnt@163.com', // 替换为你的邮箱地址
    pass: 'DB5JYtj8SpQqsTjn' // 替换为你的 SMTP 授权码
  }
});

const getRandomNum = () => {
  return `${Math.floor(Math.random() * 1000000)}`.padStart(6, '0');
};


// Next.js API 路由处理函数
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  // 设置 CORS 头部
  res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有来源

  const randomNum = getRandomNum();
  const { email } = req.body;
  // 查询邮箱是否已经被注册
  const sqlEmail = 'SELECT * FROM users_data WHERE email = ?';
  const paramsEmail = [email];
  const dbresultEmail = await searchDatas(sqlEmail, paramsEmail);
  if (dbresultEmail.length) {
    res.status(200).json({ availableEmail: false, type: "邮箱已被注册" });
    return;
  }

  // 检查数据是否已存在验证码,存在则删除
  const sqllogEmail = 'SELECT * FROM logup_email WHERE email = ?';
  const dbresultlogEmail = await getPassCodeByEmail(sqllogEmail, paramsEmail);
  console.log(dbresultlogEmail);
  if (dbresultlogEmail.length) {
    await deleteEmailcode(dbresultlogEmail[0].id);
  }

  // 向数据库存储数据
  const dbresult = await createEmailcode(email, randomNum);

  // 定义邮件内容
  const mailOptions = {
    // 发送邮件抬头和发送的邮箱
    from: '"随便玩玩ay" <snowtnt@163.com>',
    //发送邮件的地址
    to: email,
    // 邮件的标题
    subject: '您的注册验证码',
    // 邮件的内容        
    html: `
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>注册验证码</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f4f4f9;
      margin: 0;
      padding: 0;
    }
    .container {
      max-width: 600px;
      margin: 20px auto;
      padding: 20px;
      background-color: #ffffff;
      border-radius: 8px;
      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    }
    h2 {
      color: #333333;
      text-align: center;
    }
    .content {
      text-align: center;
      font-size: 16px;
      color: #555555;
    }
    .content p {
      margin: 10px 0;
    }
    .content strong {
      font-size: 24px;
      color: #007bff;
    }
    .footer {
      text-align: right;
      font-size: 14px;
      color: #777777;
      margin-top: 20px;
    }
    .footer p {
      margin: 5px 0;
    }
  </style>
</head>
<body>
  <div class="container">
    <h2>尊敬的用户：</h2>
    <div class="content">
      <p>您好！感谢您注册随便玩玩web。为了完成注册流程，请使用以下验证码进行验证：</p>
      <p style="font-size:25px">验证码：<strong>${randomNum}</strong></p>
      <p>请注意，此验证码仅用于验证您的邮箱地址，并将在 10分钟 内有效。如果这不是您本人的操作，请忽略此邮件。</p>
      <p>如果您在验证过程中遇到任何问题，请随时联系我们的客服支持，邮箱地址为 [435630144@qq.com]。</p>
    </div>
    <div class="footer">
      <p>祝您使用愉快！</p>
      <p>随便玩玩ay</p>
      <p>${(new Date()).toLocaleDateString() + " " + (new Date()).toLocaleTimeString()}</p>
    </div>
  </div>
</body>
</html>`,
  };
  if (req.method === "POST") {
    // 发送邮件
    transporter.sendMail(mailOptions, (error: any, info: any) => {
      if (error) {
        console.log('邮件发送失败：', error);
        res.status(500).json({ message: '邮件发送失败', error: error.message });
      } else {
        console.log('邮件发送成功：', info.response);
        res.status(200).json({ availableEmail: true, message: '邮件发送成功', info: info.response });
        console.log(dbresult);
        setTimeout(() => {
          // 10分钟后删除
          deleteEmailcode(dbresult.id);
        }, 600000);
      }
    });
  } else {
    // 如果不是 POST 请求，返回 405 Method Not Allowed
    res.setHeader('Allow', ['POST']);
    res.status(405).end(`Method ${req.method} Not Allowed`);
  }
}